import store from '@/store'
import router from '@/router'
import 'nprogress/nprogress.css'    // 进度条样式
import NProgress from 'nprogress'   // 在页面顶部显示加载进度条
import { Message } from 'element-ui'
import { getPageTitle } from '@/settings'
import { getToken, parseToken } from '@/utils/auth'


// NProgress配置
NProgress.configure({
    // 不显示加载时旋转的圈圈
    showSpinner: false,
    // 动画效果：贝塞尔曲线
    easing: 'ease-in-out',
    // 速度
    speed: 200
});

// 定义需要拦截的页面
const InterceptedList = ['/profile']

// 页面拦截器（跳转前）
router.beforeEach(async (to, from, next) => {
    /**
     * { to } and { from } are both route objects. must call `next`.
     * - to: 目标route，from: 出发route
     */

    // 开始加载进度条
    NProgress.start();
    // 设置页面标题
    document.title = getPageTitle(to.meta.title);
    // 判断是否是无效路由
    // const routes = router.options.routes.map(r => r.path);
    // if (routes.indexOf(to.path) === -1) {
    //     next('/404');
    // }
    // 获取token，判断用户当前是否登录
    const token = getToken();

    if (token) {
        // 已登录
        if (to.path === '/login') {
            // 访问login页面，则返回至首页
            next('/');
        } else {
            next();
            // 非login页面，获取用户信息
            // const hasGetUserInfo = store.getters.name
            // if (hasGetUserInfo) {
            //     next()
            // } else {
            //     try {
            //         // get user info
            //         await store.dispatch('user/getInfo')

            //         next()
            //     } catch (error) {
            //         // remove token and go to login page to re-login
            //         await store.dispatch('user/resetToken')
            //         Message.error(error || 'Has Error')
            //         next(`/login?redirect=${to.path}`)
            //         NProgress.done()
            //     }
            // }
        }
    } else {
        // 未登录
        if (InterceptedList.indexOf(to.path) !== -1) {
            next('/')
        } else {
            next();
        }
    }
})

// 页面拦截器（跳转后）
router.afterEach(() => {
    // 进度条加载结束
    NProgress.done();
})